import request from '@/utils/http'
import { PaginationResult, BaseResult } from '@/types/axios'
import { AdminUserType,UserQueryParams,UserEditParams } from '@/api/model/adminUserModel'


// 获取认证Token并添加Bearer前缀
const getAuthToken = (): string => {
  // 尝试从多个可能的位置获取token
  const tokenFromStorage = localStorage.getItem('token') || sessionStorage.getItem('accessToken');
  const token = tokenFromStorage || '';
  
  console.log('获取到的token:', token); // 调试日志
  
  // 确保token始终带有Bearer前缀
  if (token) {
    // 检查token是否已经包含Bearer前缀，如果没有则添加
    return token.startsWith('Bearer ') ? token : `Bearer ${token}`;
  }
  return '';
}

// 获取认证请求头
const getAuthHeaders = () => {
  const token = getAuthToken()
  return token ? { Authorization: token } : {}
}

// 公共函数，用于构建API URL
const getApiUrl = (endpoint: string): string => {
  const API_PREFIX = import.meta.env.VITE_BASE_URL || '/api';
  return `${API_PREFIX}${endpoint}`;
}

// 用户管理API类
export class AdminUserService {
// 获取用户列表
static getUserList(params: UserQueryParams) {
    const { page, pageSize, where } = params
    
    // 处理where条件：过滤空值 + 转换数字类型
    const processedWhere = where ? Object.fromEntries(
      Object.entries(where)
        .filter(([_, value]) => value !== undefined && value !== '')
        .map(([key, value]) => {
          // 转换数字类型字段
          if (['gender', 'id'].includes(key) && typeof value === 'string') {
            return [key, Number(value)]
          }
          return [key, value]
        })
    ) : undefined
  
    const userListUrl = getApiUrl('/user/list')
    console.log('请求参数:', { page, pageSize, where: processedWhere })
    
    return request.get<PaginationResult<AdminUserType[]>>({
      url: userListUrl,
      params: {
        page,
        pageSize,
        where: processedWhere ? JSON.stringify(processedWhere) : undefined
      },
      headers: getAuthHeaders()
    })
  }

  // 获取用户详情
  static getUserDetail(id: number) {
    const userDetailUrl = getApiUrl(`/user/${id}`);
    
    return request.get<BaseResult<AdminUserType>>({
      url: userDetailUrl,
      headers: getAuthHeaders()
    })
  }

  // 添加用户
  static addUser(params: UserEditParams) {
    const addUserUrl = getApiUrl('/user/add');
    console.log('添加用户API路径:', addUserUrl, '参数:', params);
    
    return request.post<BaseResult>({
      url: addUserUrl,
      data: params,
      headers: getAuthHeaders()
    })
  }

  // 编辑用户
  static updateUser(id: number, params: UserEditParams) {
    // 确保params中包含id字段
    const updateParams = { 
      ...params, 
      id 
    };
    const updateUserUrl = getApiUrl('/user/update');
    console.log('更新用户API路径:', updateUserUrl, '参数:', updateParams);
    
    return request.post<BaseResult>({
      url: updateUserUrl,
      data: updateParams,
      headers: getAuthHeaders()
    })
  }

  // 删除用户
  static deleteUser(id: number) {
    const deleteUserUrl = getApiUrl(`/user/${id}`);
    
    return request.del<BaseResult>({
      url: deleteUserUrl,
      headers: getAuthHeaders()
    })
  }

  // 批量删除用户
  static batchDeleteUsers(ids: number[]) {
    const batchDeleteUrl = getApiUrl('/user/del');
    console.log('批量删除用户API路径:', batchDeleteUrl, '参数:', { id: ids });
    
    return request.del<BaseResult>({
      url: batchDeleteUrl,
      data: { id: ids },  // 修改为 { id: ids }
      headers: getAuthHeaders()
    })
  }

  // 重置用户密码
  static resetPassword(id: number, newPassword?: string) {
    const resetPasswordUrl = getApiUrl(`/user/${id}/reset-password`);
    
    return request.put<BaseResult>({
      url: resetPasswordUrl,
      data: { password: newPassword },
      headers: getAuthHeaders()
    })
  }

  // 获取用户组列表
  static getUserGroups() {
    console.log('正在请求用户组列表API');
    
    // 使用统一的API路径构建函数
    const groupUrl = getApiUrl('/role/group');
    console.log('用户组列表API请求路径:', groupUrl);
    
    return request.get<BaseResult<Array<{
      id: number
      alias: string
      label: string
      remark: string
      sort: number
      status: number
    }>>>({
      url: groupUrl,
      headers: getAuthHeaders()
    })
  }

  // 获取所有管理员用户列表
  static getAllAdminUsers() {
    console.log('正在请求所有管理员用户列表');
    
    const allAdminUsersUrl = getApiUrl('/user/all');
    console.log('所有管理员用户列表API请求路径:', allAdminUsersUrl);
    
    return request.get<BaseResult<Array<{
      id: number
      real_name: string
    }>>>({
      url: allAdminUsersUrl,
      headers: getAuthHeaders()
    })
  }
}